﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using acessaDB;
using Frame;
using System.Data;
using System.Configuration;
using FirebirdSql.Data.FirebirdClient;
using Estrutura;


namespace Banco
{

    public class BD_Entidades
    {
        #region variaveis_globais

        acessaDB.conectaDBFireBird fireBird = new conectaDBFireBird();
        string conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionLocal"];
        string usuario = string.Empty;

        #endregion

        #region construtor

        public BD_Entidades()
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionProd"];
        }
        public BD_Entidades(string usu_Login)
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionProd"];
            usuario = usu_Login;
        }

        #endregion

        #region metodos

        public DataSet _retorna_Entidades(
                                                string ENTIDADE_ID,
                                                string ENT_RAZAO_SOCIAL,
                                                string ENT_TIPO_PESSOA,
                                                string ENT_NACIONALIDADE,
                                                string ENT_ENDERECO_HTTP,
                                                string ENT_CLIENTE,
                                                string ENT_FORNECEDOR,
                                                string ENT_FABRICANTE,
                                                string ENT_TIPO,
                                                string ENT_OBSERVACAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE,
                                                string AGE_CODIGO
                                                )
        {

            if (string.IsNullOrEmpty(ENTIDADE_ID)) ENTIDADE_ID = "'0'";
            if (string.IsNullOrEmpty(ENT_RAZAO_SOCIAL)) ENT_RAZAO_SOCIAL = "''";
            if (string.IsNullOrEmpty(ENT_TIPO_PESSOA)) ENT_TIPO_PESSOA = "''";
            if (string.IsNullOrEmpty(ENT_NACIONALIDADE)) ENT_NACIONALIDADE = "''";
            if (string.IsNullOrEmpty(ENT_ENDERECO_HTTP)) ENT_ENDERECO_HTTP = "''";
            if (string.IsNullOrEmpty(ENT_CLIENTE)) ENT_CLIENTE = "''";
            if (string.IsNullOrEmpty(ENT_FORNECEDOR)) ENT_FORNECEDOR = "''";
            if (string.IsNullOrEmpty(ENT_FABRICANTE)) ENT_FABRICANTE = "''";
            if (string.IsNullOrEmpty(ENT_TIPO)) ENT_TIPO = "''";
            if (string.IsNullOrEmpty(ENT_OBSERVACAO)) ENT_OBSERVACAO = "''";
            if (string.IsNullOrEmpty(USU_INSERT)) USU_INSERT = "'0'";
            if (string.IsNullOrEmpty(DATA_INSERT)) DATA_INSERT = "''";
            if (string.IsNullOrEmpty(USU_UPDATE)) USU_UPDATE = "'0'";
            if (string.IsNullOrEmpty(DATA_UPDATE)) DATA_UPDATE = "''";
            if (string.IsNullOrEmpty(AGE_CODIGO)) AGE_CODIGO = "''";

            string sql = "SELECT " +
                                  "ENTIDADE.ENTIDADE_ID, " +
                                  "ENTIDADE.ENT_RAZAO_SOCIAL, " +
                                  "ENTIDADE.ENT_TIPO_PESSOA, " +
                                  "ENTIDADE.ENT_NACIONALIDADE, " +
                                  "ENTIDADE.ENT_ENDERECO_HTTP, " +
                                  "ENTIDADE.ENT_CLIENTE, " +
                                  "ENTIDADE.ENT_FORNECEDOR, " +
                                  "ENTIDADE.ENT_FABRICANTE, " +
                                  "ENTIDADE.ENT_TIPO, " +
                                  "ENTIDADE.ENT_OBSERVACAO, " +
                                  "ENTIDADE.USU_INSERT, " +
                                  "ENTIDADE.DATA_INSERT, " +
                                  "ENTIDADE.USU_UPDATE, " +
                                  "ENTIDADE.DATA_UPDATE, " +
                                  "ENTIDADE.AGE_CODIGO " +
                            "FROM ENTIDADE " +                            
                            "LEFT JOIN USUARIO ON USUARIO.USUARIO_ID = ENTIDADE.USUARIO_ID " +
                            "LEFT JOIN AGENCIA_REGULAMENTADORA ON AGENCIA_REGULAMENTADORA.AGENCIA_REGULAMENTADORA_ID = ENTIDADE.AGENCIA_REGULAMENTADORA_ID " +
                            "WHERE " +
                            "      (ENTIDADE.ENTIDADE_ID                     = " + ENTIDADE_ID + "  OR " + ENTIDADE_ID + " = '0') AND " +
                            "      (ENTIDADE.ENT_RAZAO_SOCIAL                = " + ENT_RAZAO_SOCIAL + "  OR " + ENT_RAZAO_SOCIAL + " = '') AND " +
                            "      (ENTIDADE.ENT_TIPO_PESSOA                 = " + ENT_TIPO_PESSOA + "  OR " + ENT_TIPO_PESSOA + " = '') AND " +
                            "      (ENTIDADE.ENT_NACIONALIDADE               = " + ENT_NACIONALIDADE + "  OR " + ENT_NACIONALIDADE + " = '') AND " +
                            "      (ENTIDADE.ENT_ENDERECO_HTTP               = " + ENT_ENDERECO_HTTP + "  OR " + ENT_ENDERECO_HTTP + " = '') AND " +
                            "      (ENTIDADE.ENT_CLIENTE                     = " + ENT_CLIENTE + "  OR " + ENT_CLIENTE + " = '') AND " +
                            "      (ENTIDADE.ENT_FORNECEDOR                  = " + ENT_FORNECEDOR + "  OR " + ENT_FORNECEDOR + " = '') AND " +
                            "      (ENTIDADE.ENT_FABRICANTE                  = " + ENT_FABRICANTE + "  OR " + ENT_FABRICANTE + " = '') AND " +
                            "      (ENTIDADE.ENT_TIPO                        = " + ENT_TIPO + "  OR " + ENT_TIPO + " = '') AND " +
                            "      (ENTIDADE.ENT_OBSERVACAO                  = " + ENT_OBSERVACAO + "  OR " + ENT_OBSERVACAO + " = '') AND " +
                            "      (ENTIDADE.USU_INSERT                      = " + USU_INSERT + "  OR " + USU_INSERT + " = '0') AND " +
                            "      (ENTIDADE.DATA_INSERT                     = " + DATA_INSERT + "  OR " + DATA_INSERT + " = '') AND " +
                            "      (ENTIDADE.USU_UPDATE                      = " + USU_UPDATE + "  OR " + USU_UPDATE + " = '0') AND " +
                            "      (ENTIDADE.DATA_UPDATE                     = " + DATA_UPDATE + "  OR " + DATA_UPDATE + " = '') AND " +
                            "      (ENTIDADE.AGE_CODIGO                      = " + AGE_CODIGO + "  OR " + AGE_CODIGO + " = '') "+
                            "ORDER BY ENTIDADE.ENT_RAZAO_SOCIAL";

            DataSet dsRetorno = fireBird.retornaDataSet(sql, conectionString);
            return dsRetorno;

        }


        public List<ES_Entidades> _obter_Entidades(
                                                string ENTIDADE_ID,
                                                string ENT_RAZAO_SOCIAL,
                                                string ENT_TIPO_PESSOA,
                                                string ENT_NACIONALIDADE,
                                                string ENT_ENDERECO_HTTP,
                                                string ENT_CLIENTE,
                                                string ENT_FORNECEDOR,
                                                string ENT_FABRICANTE,
                                                string ENT_TIPO,
                                                string ENT_OBSERVACAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE,
                                                string AGE_CODIGO,
                                                string ORDER_BY_CLAUSE
                                                )
        {

            if (string.IsNullOrEmpty(ENTIDADE_ID)) ENTIDADE_ID = "'0'";
            if (string.IsNullOrEmpty(ENT_RAZAO_SOCIAL)) ENT_RAZAO_SOCIAL = "''"; else ENT_RAZAO_SOCIAL = Util.retonarAspas(ENT_RAZAO_SOCIAL + "%");
            if (string.IsNullOrEmpty(ENT_TIPO_PESSOA)) ENT_TIPO_PESSOA = "''"; else ENT_TIPO_PESSOA = Util.retonarAspas(ENT_TIPO_PESSOA);
            if (string.IsNullOrEmpty(ENT_NACIONALIDADE)) ENT_NACIONALIDADE = "''"; else ENT_NACIONALIDADE = Util.retonarAspas(ENT_NACIONALIDADE); 
            if (string.IsNullOrEmpty(ENT_ENDERECO_HTTP)) ENT_ENDERECO_HTTP = "''";
            
            if (string.IsNullOrEmpty(ENT_TIPO)) ENT_TIPO = "''"; else ENT_TIPO = Util.retonarAspas(ENT_TIPO); 
            if (string.IsNullOrEmpty(ENT_OBSERVACAO)) ENT_OBSERVACAO = "''";
            if (string.IsNullOrEmpty(USU_INSERT)) USU_INSERT = "'0'";
            if (string.IsNullOrEmpty(DATA_INSERT)) DATA_INSERT = "''";
            if (string.IsNullOrEmpty(USU_UPDATE)) USU_UPDATE = "'0'";
            if (string.IsNullOrEmpty(DATA_UPDATE)) DATA_UPDATE = "''";
            if (string.IsNullOrEmpty(AGE_CODIGO)) AGE_CODIGO = "''";
            if (string.IsNullOrEmpty(ORDER_BY_CLAUSE)) ORDER_BY_CLAUSE = "ENTIDADE.ENTIDADE_ID DESC";   

            string sql = "SELECT " +
                                  "ENTIDADE.ENTIDADE_ID, " +
                                  "ENTIDADE.ENT_RAZAO_SOCIAL, " +
                                  "CASE ENTIDADE.ENT_TIPO_PESSOA WHEN 'J' THEN 'JURÍDICA' WHEN 'F' THEN 'FÍSICA' END AS ENT_TIPO_PESSOA, " +
                                  "CASE ENTIDADE.ENT_NACIONALIDADE WHEN 'N' THEN 'NACIONAL' WHEN 'E' THEN 'EXTRANGEIRA' END AS ENT_NACIONALIDADE, " +
                                  "ENTIDADE.ENT_ENDERECO_HTTP, " +
                                  "ENTIDADE.ENT_CLIENTE, " +
                                  "ENTIDADE.ENT_FORNECEDOR, " +
                                  "ENTIDADE.ENT_FABRICANTE, " +
                                  "CASE ENTIDADE.ENT_TIPO WHEN 'C' THEN 'CIVIL' WHEN 'M' THEN 'MILITAR' END AS ENT_TIPO, " +
                                  "ENTIDADE.ENT_OBSERVACAO, " +
                                  "ENTIDADE.USU_INSERT, " +
                                  "ENTIDADE.DATA_INSERT, " +
                                  "ENTIDADE.USU_UPDATE, " +
                                  "ENTIDADE.DATA_UPDATE, " +
                                  "ENTIDADE.AGE_CODIGO " +
                            "FROM ENTIDADE " +
                            "WHERE " +
                            "      (ENTIDADE.ENTIDADE_ID                     = " + ENTIDADE_ID + "  OR " + ENTIDADE_ID + " = '0') AND " +
                            "      (ENTIDADE.ENT_RAZAO_SOCIAL                LIKE " + ENT_RAZAO_SOCIAL + "  OR " + ENT_RAZAO_SOCIAL + " = '') AND " +
                            "      (ENTIDADE.ENT_TIPO_PESSOA                 = " + ENT_TIPO_PESSOA + "  OR " + ENT_TIPO_PESSOA + " = '') AND " +
                            "      (ENTIDADE.ENT_NACIONALIDADE               = " + ENT_NACIONALIDADE + "  OR " + ENT_NACIONALIDADE + " = '') AND " +
                            "      (ENTIDADE.ENT_ENDERECO_HTTP               = " + ENT_ENDERECO_HTTP + "  OR " + ENT_ENDERECO_HTTP + " = '') AND ";
                            if(ENT_CLIENTE == "S")
                                sql +="      (ENTIDADE.ENT_CLIENTE = 'S') AND " ;
                            if(ENT_FORNECEDOR == "S")
                                sql+="      (ENTIDADE.ENT_FORNECEDOR = 'S') AND ";
                            if(ENT_FABRICANTE == "S")
                                sql+="      (ENTIDADE.ENT_FABRICANTE = 'S')  AND ";
                            sql +=
                            "      (ENTIDADE.ENT_TIPO                        = " + ENT_TIPO + "  OR " + ENT_TIPO + " = '') AND " +
                            "      (ENTIDADE.ENT_OBSERVACAO                  = " + ENT_OBSERVACAO + "  OR " + ENT_OBSERVACAO + " = '') AND " +
                            //"      (ENTIDADE.USU_INSERT                      = " + USU_INSERT + "  OR " + USU_INSERT + " = '0') AND " +

                            //"      (ENTIDADE.USU_UPDATE                      = " + USU_UPDATE + "  OR " + USU_UPDATE + " = '0') AND " +

                            "      (ENTIDADE.AGE_CODIGO                      = " + AGE_CODIGO + "  OR " + AGE_CODIGO + " = '') "+
                            " ORDER BY "+ORDER_BY_CLAUSE;

            List<ES_Entidades> lista = new List<ES_Entidades>();
            FbConnection fbConexao = new FbConnection(conectionString);
            FbDataReader dr = fireBird.retornaDataReader(sql, conectionString, fbConexao);
            try
            {
                while (dr.Read())
                {
                    ES_Entidades item = new ES_Entidades();
                    item.ENTIDADE_ID = dr["ENTIDADE_ID"].ToString();
                    item.ENT_RAZAO_SOCIAL = dr["ENT_RAZAO_SOCIAL"].ToString();
                    item.ENT_TIPO_PESSOA = dr["ENT_TIPO_PESSOA"].ToString();
                    item.ENT_NACIONALIDADE = dr["ENT_NACIONALIDADE"].ToString();
                    item.ENT_ENDERECO_HTTP = dr["ENT_ENDERECO_HTTP"].ToString();
                    item.ENT_CLIENTE = dr["ENT_CLIENTE"].ToString();
                    item.ENT_FORNECEDOR = dr["ENT_FORNECEDOR"].ToString();
                    item.ENT_FABRICANTE = dr["ENT_FABRICANTE"].ToString();
                    item.ENT_TIPO = dr["ENT_TIPO"].ToString();
                    item.ENT_OBSERVACAO = dr["ENT_OBSERVACAO"].ToString();
                    item.USU_INSERT = dr["USU_INSERT"].ToString();
                    item.DATA_INSERT = dr["DATA_INSERT"].ToString();
                    item.USU_UPDATE = dr["USU_UPDATE"].ToString();
                    item.DATA_UPDATE = dr["DATA_UPDATE"].ToString();
                    item.AGE_CODIGO = dr["AGE_CODIGO"].ToString();
                    lista.Add(item);

                }
                return lista;
            }
            finally
            {
                fireBird.fecharConexao(fbConexao);
            }
        }


        public ES_Entidades _obter_Entidades_by_id(string ENTIDADE_ID)
        {

            if (string.IsNullOrEmpty(ENTIDADE_ID)) ENTIDADE_ID = "0";            

            string sql = "SELECT " +
                                  "ENTIDADE.ENTIDADE_ID, " +
                                  "ENTIDADE.ENT_RAZAO_SOCIAL, " +
                                  "ENTIDADE.ENT_TIPO_PESSOA, " +
                                  "ENTIDADE.ENT_NACIONALIDADE, " +
                                  "ENTIDADE.ENT_ENDERECO_HTTP, " +
                                  "ENTIDADE.ENT_CLIENTE, " +
                                  "ENTIDADE.ENT_FORNECEDOR, " +
                                  "ENTIDADE.ENT_FABRICANTE, " +
                                  "ENTIDADE.ENT_TIPO, " +
                                  "ENTIDADE.ENT_OBSERVACAO, " +
                                  "ENTIDADE.USU_INSERT, " +
                                  "ENTIDADE.DATA_INSERT, " +
                                  "ENTIDADE.USU_UPDATE, " +
                                  "ENTIDADE.DATA_UPDATE, " +
                                  "ENTIDADE.AGE_CODIGO " +
                            "FROM ENTIDADE " +
                            "WHERE ENTIDADE.ENTIDADE_ID    = " + ENTIDADE_ID;

            ES_Entidades item = new ES_Entidades();
            FbConnection fbConexao = new FbConnection(conectionString);
            FbDataReader dr = fireBird.retornaDataReader(sql, conectionString, fbConexao);
            try
            {
                while (dr.Read())
                {
                    
                    item.ENTIDADE_ID = dr["ENTIDADE_ID"].ToString();
                    item.ENT_RAZAO_SOCIAL = dr["ENT_RAZAO_SOCIAL"].ToString();
                    item.ENT_TIPO_PESSOA = dr["ENT_TIPO_PESSOA"].ToString();
                    item.ENT_NACIONALIDADE = dr["ENT_NACIONALIDADE"].ToString();
                    item.ENT_ENDERECO_HTTP = dr["ENT_ENDERECO_HTTP"].ToString();
                    item.ENT_CLIENTE = dr["ENT_CLIENTE"].ToString();
                    item.ENT_FORNECEDOR = dr["ENT_FORNECEDOR"].ToString();
                    item.ENT_FABRICANTE = dr["ENT_FABRICANTE"].ToString();
                    item.ENT_TIPO = dr["ENT_TIPO"].ToString();
                    item.ENT_OBSERVACAO = dr["ENT_OBSERVACAO"].ToString();
                    item.USU_INSERT = dr["USU_INSERT"].ToString();
                    item.DATA_INSERT = dr["DATA_INSERT"].ToString();
                    item.USU_UPDATE = dr["USU_UPDATE"].ToString();
                    item.DATA_UPDATE = dr["DATA_UPDATE"].ToString();
                    item.AGE_CODIGO = dr["AGE_CODIGO"].ToString();
                    

                }
                return item;
            }
            finally
            {
                fireBird.fecharConexao(fbConexao);
            }
        }

        public void _inserir_Entidades(
                                                string ENTIDADE_ID,
                                                string ENT_RAZAO_SOCIAL,
                                                string ENT_TIPO_PESSOA,
                                                string ENT_NACIONALIDADE,
                                                string ENT_ENDERECO_HTTP,
                                                string ENT_CLIENTE,
                                                string ENT_FORNECEDOR,
                                                string ENT_FABRICANTE,
                                                string ENT_TIPO,
                                                string ENT_OBSERVACAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE,
                                                string AGE_CODIGO
                                                )
        {

            string sql = " INSERT INTO ENTIDADE " +
                         "      ( " +
                         "          ENT_RAZAO_SOCIAL               , " +
                         "          ENT_TIPO_PESSOA                , " +
                         "          ENT_NACIONALIDADE              , " +
                         "          ENT_ENDERECO_HTTP              , " +
                         "          ENT_CLIENTE                    , " +
                         "          ENT_FORNECEDOR                 , " +
                         "          ENT_FABRICANTE                 , " +
                         "          ENT_TIPO                       , " +
                         "          ENT_OBSERVACAO                 , " +
                         "          USU_INSERT                     , " +
                         "          DATA_INSERT                    , " +
                         "          USU_UPDATE                     , " +
                         "          DATA_UPDATE                    , " +
                         "          AGE_CODIGO                       " +
                 "      )" +
                 "  VALUES " +
                 "      ( " +
                              Util.retonarAspas(ENT_RAZAO_SOCIAL, true) + ", " +
                              Util.retonarAspas(ENT_TIPO_PESSOA, true) + ", " +
                              Util.retonarAspas(ENT_NACIONALIDADE, true) + ", " +
                              Util.retonarAspas(ENT_ENDERECO_HTTP, true) + ", " +
                              Util.retonarAspas(ENT_CLIENTE, true) + ", " +
                              Util.retonarAspas(ENT_FORNECEDOR, true) + ", " +
                              Util.retonarAspas(ENT_FABRICANTE, true) + ", " +
                              Util.retonarAspas(ENT_TIPO, true) + ", " +
                              Util.retonarAspas(ENT_OBSERVACAO,true) + ", " +
                              Util.retonarNull(USU_INSERT) + ", " +
                              Util.retonarNull(DATA_INSERT) + ", " +
                              Util.retonarNull(USU_UPDATE) + ", " +
                              Util.retonarNull(DATA_UPDATE) + ", " +
                              Util.retonarAspas(AGE_CODIGO, true) +
                 "      )";
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _atualizar_Entidades(
                                                string ENTIDADE_ID,
                                                string ENT_RAZAO_SOCIAL,
                                                string ENT_TIPO_PESSOA,
                                                string ENT_NACIONALIDADE,
                                                string ENT_ENDERECO_HTTP,
                                                string ENT_CLIENTE,
                                                string ENT_FORNECEDOR,
                                                string ENT_FABRICANTE,
                                                string ENT_TIPO,
                                                string ENT_OBSERVACAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE,
                                                string AGE_CODIGO
                                                )
        {

            string sql = " UPDATE ENTIDADE SET " +
                         "      ENT_RAZAO_SOCIAL                = " + Util.retonarAspas(ENT_RAZAO_SOCIAL, true) + ", " +
                         "      ENT_TIPO_PESSOA                 = " + Util.retonarAspas(ENT_TIPO_PESSOA, true) + ", " +
                         "      ENT_NACIONALIDADE               = " + Util.retonarAspas(ENT_NACIONALIDADE, true) + ", " +
                         "      ENT_ENDERECO_HTTP               = " + Util.retonarAspas(ENT_ENDERECO_HTTP, true) + ", " +
                         "      ENT_CLIENTE                     = " + Util.retonarAspas(ENT_CLIENTE, true) + ", " +
                         "      ENT_FORNECEDOR                  = " + Util.retonarAspas(ENT_FORNECEDOR, true) + ", " +
                         "      ENT_FABRICANTE                  = " + Util.retonarAspas(ENT_FABRICANTE, true) + ", " +
                         "      ENT_TIPO                        = " + Util.retonarAspas(ENT_TIPO, true) + ", " +
                         "      ENT_OBSERVACAO                  = " + Util.retonarAspas(ENT_OBSERVACAO, true) + ", " +
                         "      USU_INSERT                      = " + Util.retonarNull(USU_INSERT) + ", " +
                         "      DATA_INSERT                     = " + Util.retonarNull(DATA_INSERT) + ", " +
                         "      USU_UPDATE                      = " + Util.retonarNull(USU_UPDATE) + ", " +
                         "      DATA_UPDATE                     = " + Util.retonarNull(DATA_UPDATE) + ", " +
                         "      AGE_CODIGO                      = " + Util.retonarAspas(AGE_CODIGO, true) +
                         " WHERE ENTIDADE_ID =  " + ENTIDADE_ID;
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _excluir_Entidades(string ENTIDADE_ID)
        {
            string sql = "DELETE FROM ENTIDADE WHERE ENTIDADE_ID = " + ENTIDADE_ID;
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        #endregion
    }
}
